home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / graphics / amicad / arexx_english / importclip1.0.amicad < prev    next >
Text File  |  1999-12-06  |  9KB  |  333 lines

  1. /* Convert an old clip (1.0) to the new format (1.1) */
  2. /* $VER: 1.01e (© R.Florac, 20/02/99) */
  3.  
  4. options results     /* indispensable pour récupérer le résultat des macros */
  5.  
  6. signal on error     /* pour l'interception des erreurs */
  7. signal on syntax
  8.  
  9. 'VERSION(0)'
  10. if result < 2 then do
  11.     'MESSAGE("This script needs"+CHR(10)+"AmiCAD version 2")'
  12.     exit
  13. end
  14.  
  15. 'REQFILE("File to load?","Work:AmiCAD/Clips","")'; f=result
  16. if f="" then exit
  17.  
  18. if open(fichier,f,'READ') then do
  19.     entete=lire_chaine(fichier)
  20.     if entete~="AmiCADClip 1.0" then do
  21.     'MESSAGE("Incorrect file format")'
  22.     exit
  23.     end
  24.     'LOCK(-1):UNMARK(-1)'
  25.     objets=0; objet=0; gmaxi=0
  26.     nombre_objets=lire_valeur(fichier)
  27.     do until eof(fichier)
  28.     groupe=0
  29.     type=lire_octet(fichier)
  30.     if type='' then leave
  31.     if type>63 then do
  32.         if type>127 then do
  33.         groupe=1
  34.         type=type-128
  35.         end
  36.         if type>63 then do
  37.         largeur_trait=lire_octet(fichier)
  38.         type=type-64
  39.         end
  40.         else largeur_trait=1
  41.     end
  42.     if largeur_trait > 3 then largeur_trait=0-largeur_trait
  43.     if groupe~=0 then groupe=lire_valeur(fichier)
  44.     select
  45.         when type=1 then do     /* composant */
  46.         comp=lire_chaine(fichier)
  47.         circuit=lire_octet(fichier)
  48.         x0=lire_valeur(fichier)
  49.         y0=lire_valeur(fichier)
  50.         call lire_mode(fichier)
  51.         call lire_echelles(fichier)
  52.         'DRAWMODE('largeur_trait')'
  53.         'PUTPART("'comp'",'x0+10','y0+10')'; objet=result; composant=objet
  54.         'MARK('objet')'
  55.         'SETPINS('objet',1)'
  56.         'CONVERT('objet',0)'
  57.         objets=objets+1
  58.         end
  59.         when type=2 then do     /* fil de liaison */
  60.         x0=lire_valeur(fichier)
  61.         y0=lire_valeur(fichier)
  62.         x1=lire_valeur(fichier)
  63.         y1=lire_valeur(fichier)
  64.         'DRAWMODE(1):DRAW('x0+10','y0+10','x1+10','y1+10')'; objet=result
  65.         'MARK('objet')'
  66.         objets=objets+1
  67.         end
  68.         when type=3 then do     /* arc de cercle */
  69.         'DRAWMODE('largeur_trait')'
  70.         x0=lire_valeur(fichier)
  71.         y0=lire_valeur(fichier)
  72.         rh=lire_valeur(fichier)
  73.         rv=lire_valeur(fichier)
  74.         ad=lire_valeur(fichier)
  75.         af=lire_valeur(fichier)
  76.         'ARC('x0+10','y0+10','rh','rv','ad','af')'; objet=result
  77.         'MARK('objet')'
  78.         objets=objets+1
  79.         end
  80.         when type=4 then do     /* texte */
  81.         'DRAWMODE('largeur_trait')'
  82.         t=lire_chaine(fichier)
  83.         x0=lire_valeur(fichier)
  84.         y0=lire_valeur(fichier)
  85.         call lire_mode(fichier)
  86.         call lire_echelles(fichier)
  87.         'WRITE("'t'",'x0+10','y0+10')'; objet=result
  88.         'MARK('objet')'
  89.         objets=objets+1
  90.         end
  91.         when type=5 then do     /* référence composant */
  92.         'DRAWMODE('largeur_trait')'
  93.         t=lire_chaine(fichier)
  94.         x0=lire_valeur(fichier)
  95.         y0=lire_valeur(fichier)
  96.         call lire_mode(fichier)
  97.         call lire_echelles(fichier)
  98.         'WRITE("'t'",'x0+10','y0+10')'; objet=result
  99.         'LINKREF('composant','objet')'
  100.         'MARK('objet')'
  101.         objets=objets+1
  102.         end
  103.         when type=6 then do     /* valeur composant */
  104.         'DRAWMODE('largeur_trait')'
  105.         t=lire_chaine(fichier)
  106.         x0=lire_valeur(fichier)
  107.         y0=lire_valeur(fichier)
  108.         call lire_mode(fichier)
  109.         call lire_echelles(fichier)
  110.         'WRITE("'t'",'x0+10','y0+10')'; objet=result
  111.         'LINKVAL('composant','objet')'
  112.         'MARK('objet')'
  113.         objets=objets+1
  114.         end
  115.         when type=23 | type=7 then do    /* connexion */
  116.         x0=lire_valeur(fichier)
  117.         y0=lire_valeur(fichier)
  118.         call lire_echelles(fichier)
  119.         'JUNCTION('x0+10','y0+10')'; objet=result
  120.         if type=23 then 'CONVERT('objet',1)'
  121.         else 'CONVERT('objet',0)'
  122.         'MARK('objet')'
  123.         objets=objets+1
  124.         end
  125.         when type=8 then do     /* pointillés */
  126.         x0=lire_valeur(fichier)
  127.         y0=lire_valeur(fichier)
  128.         x1=lire_valeur(fichier)
  129.         y1=lire_valeur(fichier)
  130.         'DRAWMODE(0):DRAW('x0+10','y0+10','x1+10','y1+10')'; objet=result
  131.         'MARK('objet')'
  132.         objets=objets+1
  133.         end
  134.         when type=9 then do     /* bus */
  135.         x0=lire_valeur(fichier)
  136.         y0=lire_valeur(fichier)
  137.         x1=lire_valeur(fichier)
  138.         y1=lire_valeur(fichier)
  139.         'DRAWMODE(7):DRAW('x0+10','y0+10','x1+10','y1+10')'; objet=result
  140.         'MARK('objet')'
  141.         objets=objets+1
  142.         end
  143.         when type=10 then do    /* ellipse */
  144.         'DRAWMODE('largeur_trait')'
  145.         x0=lire_valeur(fichier)
  146.         y0=lire_valeur(fichier)
  147.         rh=lire_valeur(fichier)
  148.         rv=lire_valeur(fichier)
  149.         'ELLIPSE('x0+10','y0+10','rh','rv')'; objet=result
  150.         'MARK('objet')'
  151.         objets=objets+1
  152.         end
  153.         when type=11 then do    /* connecteur entrée */
  154.         'DRAWMODE('largeur_trait')'
  155.         t=lire_chaine(fichier)
  156.         x0=lire_valeur(fichier)
  157.         y0=lire_valeur(fichier)
  158.         call lire_mode(fichier)
  159.         call lire_echelles(fichier)
  160.         'INPUT("'t'",'x0+10','y0+10')'; objet=result
  161.         'MARK('objet')'
  162.         objets=objets+1
  163.         end
  164.         when type=12 then do    /* connecteur de sortie */
  165.         'DRAWMODE('largeur_trait')'
  166.         t=lire_chaine(fichier)
  167.         x0=lire_valeur(fichier)
  168.         y0=lire_valeur(fichier)
  169.         call lire_mode(fichier)
  170.         call lire_echelles(fichier)
  171.         'OUTPUT("'t'",'x0+10','y0+10')'; objet=result
  172.         'MARK('objet')'
  173.         objets=objets+1
  174.         end
  175.         when type=15 then do    /* trait double */
  176.         'DRAWMODE(2)'
  177.         x0=lire_valeur(fichier)
  178.         y0=lire_valeur(fichier)
  179.         x1=lire_valeur(fichier)
  180.         y1=lire_valeur(fichier)
  181.         'DRAW('x0+10','y0+10','x1+10','y1+10')'; objet=result
  182.         'MARK('objet')'
  183.         objets=objets+1
  184.         end
  185.         when type=16 then do    /* composant sans bornes */
  186.         comp=lire_chaine(fichier)
  187.         circuit=lire_octet(fichier)
  188.         x0=lire_valeur(fichier)
  189.         y0=lire_valeur(fichier)
  190.         call lire_mode(fichier)
  191.         call lire_echelles(fichier)
  192.         'DRAWMODE('largeur_trait')'
  193.         'PUTPART("'comp'",'x0+10','y0+10')'; objet=result; composant=objet
  194.         'SETPINS('objet',0)'
  195.         'CONVERT('objet',0)'
  196.         'MARK('objet')'
  197.         objets=objets+1
  198.         end
  199.         when type=17 then do    /* définition groupe */
  200.         do 5
  201.             lt=lire_valeur(fichier)
  202.         end
  203.         objets=objets+1
  204.         end
  205.         when type=19 then do    /* NOM_SYMBOLE_ALTERNÉ */
  206.         comp=lire_chaine(fichier)
  207.         circuit=lire_octet(fichier)
  208.         x0=lire_valeur(fichier)
  209.         y0=lire_valeur(fichier)
  210.         call lire_mode(fichier)
  211.         call lire_echelles(fichier)
  212.         'DRAWMODE('largeur_trait')'
  213.         'PUTPART("'comp'",'x0+10','y0+10')'; objet=result; composant=objet
  214.         'SETPINS('objet',1)'
  215.         'CONVERT('objet',1)'
  216.         'MARK('objet')'
  217.         objets=objets+1
  218.         end
  219.         when type=20 then do    /* NOM_SYMBOLE_ALTERNÉ_SANS_BORNES */
  220.         comp=lire_chaine(fichier)
  221.         circuit=lire_octet(fichier)
  222.         x0=lire_valeur(fichier)
  223.         y0=lire_valeur(fichier)
  224.         call lire_mode(fichier)
  225.         call lire_echelles(fichier)
  226.         'DRAWMODE('largeur_trait')'
  227.         'PUTPART("'comp'",'x0+10','y0+10')'; objet=result; composant=objet
  228.         'SETPINS('objet',0)'
  229.         'CONVERT('objet',1)'
  230.         'MARK('objet')'
  231.         objets=objets+1
  232.         end
  233.         when type=21 then do    /* Trait personnalisé */
  234.         lt=lire_octet(fichier)
  235.         'DRAWMODE('0-lt')'
  236.         x0=lire_valeur(fichier)
  237.         y0=lire_valeur(fichier)
  238.         x1=lire_valeur(fichier)
  239.         y1=lire_valeur(fichier)
  240.         'DRAW('x0+10','y0+10','x1+10','y1+10')'; objet=result
  241.         'MARK('objet')'
  242.         objets=objets+1
  243.         end
  244.         when type=22 then do    /* boîte */
  245.         lt=lire_octet(fichier)
  246.         'DRAWMODE('0-lt')'
  247.         x0=lire_valeur(fichier)
  248.         y0=lire_valeur(fichier)
  249.         x1=lire_valeur(fichier)
  250.         y1=lire_valeur(fichier)
  251.         'BOX('x0+10','y0+10','x1+10','y1+10')'; objet=result
  252.         'MARK('objet')'
  253.         objets=objets+1
  254.         end
  255.         otherwise do
  256.         'MESSAGE("Donnée inconnue: 'type'")'
  257.         leave
  258.         end
  259.     end
  260.     end
  261.     do i=1 to gmaxi
  262.     if g.i ~= "G."||i then 'GROUP('g.i')'
  263.     end
  264.     close(fichier)
  265.     if    nombre_objets~=objets then 'MESSAGE("ATTENTION:"+CHR(10)+"The number of objects"+CHR(10)+"that has been read"+CHR(10)+"('objets') is different"+CHR(10)+"from the attemped one ('nombre_objets')")'
  266.     'UNLOCK(-1):REQUEST("End of file found"+CHR(10)+"'objets' objects"+CHR(10)+CHR(10)+"Do you want to replace"+CHR(10)+"this clip by the new"+CHR(10)+"version ?")'
  267.     if result=1 then do
  268.     'COPY(5):SAVECLIP(5,"'f'"):MACRO(7):MENU("Delete")'
  269.     end
  270. end
  271.  
  272. exit
  273.  
  274. lire_mode: procedure
  275.     parse arg fichier
  276.     mode=lire_octet(fichier)
  277.     if mode>15 then mode=mode-16
  278.     if mode>7 then mode=mode-8
  279.     if mode>3 then do
  280.     'SYMMETRY(0,1)'
  281.     mode=mode-4
  282.     end
  283.     else 'SYMMETRY(0,0)'
  284.     'ROTATE(0,'mode')'
  285.     return
  286.  
  287. lire_echelles: procedure
  288.     parse arg fichier
  289.     eh=lire_octet(fichier)*100
  290.     ev=lire_octet(fichier)*100
  291.     'SETSCALE(0,'eh','ev')'
  292.     return
  293.  
  294. lire_chaine: procedure
  295.     parse arg fichier
  296.     l=""
  297.     do forever
  298.     c=readch(fichier,1)
  299.     if c='00'x then return l
  300.     l=l||c
  301.     end
  302.  
  303. lire_valeur: procedure
  304.     parse arg fichier
  305.     v=lire_octet(fichier)*256
  306.     v=v+lire_octet(fichier)
  307.     return v
  308.  
  309. lire_octet: procedure expose objets
  310.     parse arg fichier
  311.     c=readch(fichier,1)
  312.     if eof(fichier) then return ""
  313.     v=0
  314.     if bittst(c,0) then v=1
  315.     if bittst(c,1) then v=v+2
  316.     if bittst(c,2) then v=v+4
  317.     if bittst(c,3) then v=v+8
  318.     if bittst(c,4) then v=v+16
  319.     if bittst(c,5) then v=v+32
  320.     if bittst(c,6) then v=v+64
  321.     if bittst(c,7) then v=v+128
  322.     return v
  323.  
  324. /* Traitement des erreurs, interruption du programme */
  325. syntax:
  326. erreur=RC
  327. 'MESSAGE("Syntax error"+CHR(10)+"in line 'SIGL'"+CHR(10)+"'errortext(erreur)'"):UNLOCK(-1)'
  328. exit
  329.  
  330. error:
  331. 'MESSAGE("Error in line 'SIGL'"):UNLOCK(-1)'
  332. exit
  333.